package com.java.yz.day11.ketang;

import java.util.HashSet;
import java.util.Set;

/*为什么Set可以使得集合的元素唯一而且无序呢？看底层实现
    HashSet类概述
        不保证 set 的迭代顺序
        特别是它不保证该顺序恒久不变。
        HashSet如何保证元素唯一性
    底层数据结构是哈希表(元素是链表的数组)
        哈希表依赖于哈希值存储
    添加功能底层依赖两个方法：  它的底层依靠的就是这两个方法实现去重
        int hashCode()
        boolean equals(Object obj)
 */
public class HashSetDemo1 {
    public static void main(String[] args) {
        //使用HashSet存储自定义对象Teacher， 当姓名和年龄一样时，就认为是同一个老师
        Set<Teacher> teachers = new HashSet<>();
        teachers.add(new Teacher("李白",40));
        teachers.add(new Teacher("白居易",42));
        teachers.add(new Teacher("杜甫",46));
        teachers.add(new Teacher("李白",40));
        System.out.println(teachers);
        //先要达到去重的目的，就要重写Teacher的hashCode()和equals()方法
        //重写完之后就可以达到去重的目的
        //就不会调用父类Object的equals()方法去比较地址值


    }
}
